public class TypeSafeEnum
{
	private readonly string _name;

	private readonly int _value;

	private int Value => _value;

	protected TypeSafeEnum(int value, string name)
	{
		_value = value;
		_name = name;
	}

	public override string ToString()
	{
		return _name;
	}

	public int ToInt()
	{
		return _value;
	}

	public static bool operator ==(TypeSafeEnum a, TypeSafeEnum b)
	{
		return a.Value == b.Value;
	}

	public static bool operator !=(TypeSafeEnum a, TypeSafeEnum b)
	{
		return a.Value != b.Value;
	}
}
